package qc.common.core.utils;

import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.RandomUtils;

/**
 * 随机生成工具类
 *
 * @author QuCheng Tech
 * @since 2023/9/6
 */
public class RandomUtil {
    /**
     * 生成指定长度的大小写字母，如果长度指定错误默认为1
     *
     * @param count 长度，即生成的大小写字母序列长度
     * @return java.lang.String
     * @author QuCheng Tech
     * @since 2023/9/6
     */
    public static String generateAlphabetic(int count) {
        if (count < 0x1)
            count = 0x1;

        return RandomStringUtils.randomAlphabetic(count);
    }

    /**
     * 生成指定长度的大小写字母或数字，如果长度指定错误默认为1
     *
     * @param count 长度，即生成的大小写字母或数字序列长度
     * @return java.lang.String
     * @author QuCheng Tech
     * @since 2023/9/6
     */
    public static String generateAlphanumeric(int count) {
        if (count < 0x1)
            count = 0x1;

        return RandomStringUtils.randomAlphanumeric(count);
    }

    /**
     * 生成指定长度的大写字母，如果长度指定错误默认为1
     *
     * @param count 长度，即生成的大写字母序列长度
     * @return java.lang.String
     * @author QuCheng Tech
     * @since 2023/9/6
     */
    public static String generateUpperCaseLetters(int count) {
        if (count < 0x1)
            count = 0x1;

        return RandomStringUtils.random(count, 65, 90, true, true);
    }

    /**
     * 生成指定长度的小写字母，如果长度指定错误默认为1
     *
     * @param count 长度，即生成的小写字母序列长度
     * @return java.lang.String
     * @author QuCheng Tech
     * @since 2023/9/6
     */
    public static String generateLowerCaseLetters(int count) {
        if (count < 0x1)
            count = 0x1;

        return RandomStringUtils.random(count, 97, 122, true, true);
    }

    /**
     * 生成指定长度的数字，如果长度指定错误默认为1
     *
     * @param count 长度，即生成的数字序列长度
     * @return java.lang.String
     * @author QuCheng Tech
     * @since 2023/9/6
     */
    public static String generateNumeric(int count) {
        if (count < 0x1)
            count = 0x1;

        return RandomStringUtils.randomNumeric(count);
    }

    /**
     * 生成指定长度的特殊字符，如果长度指定错误默认为1
     *
     * @param count 长度，即生成的特殊字符序列长度
     * @return java.lang.String
     * @author QuCheng Tech
     * @since 2023/9/6
     */
    public static String generateSpecialChars(int count) {
        if (count < 0x1)
            count = 0x1;

        return RandomStringUtils.random(count, 33, 47, false, false);
    }

    /**
     * 生成指定范围内的整数值
     *
     * @param minValue 最小值
     * @param maxValue 最大值
     * @return int
     * @author QuCheng Tech
     * @since 2023/9/6
     */
    public static int generateIntValueByRange(int minValue, int maxValue) {
        return RandomUtils.nextInt(minValue, maxValue);
    }
}
